Computer and other data processing systems often need to transfer data, usually in the form of data words, between various parts of the system as fast as possible to reduce latency and increase system performance. Some data can arrive at a given location within the system at unpredictable times, whereas other data, from another location within the system, can arrive more predictably. Different arrival times lead to gaps between the data words, and require the data words to be buffered and, in some cases, put into a predetermined sequence before they are passed to the given location. Buffering and sequencing the data can increase the time it takes the data to move from one location within the system to another and contributes to latency. The performance of such systems can be optimized if the data words are transferred at times and in a sequence that optimize a selected system parameter such as latency, bandwidth, or safety, rather than simply buffering the data words and then transferring them at one time.